#ifndef CONFIG_INFOSET_H
#define CONFIG_INFOSET_H

#include <QWidget>
#include <QScroller>
#include <QInputDialog>
#include <QMessageBox>
#include <QFormLayout>
#include <QButtonGroup>
#include <QRadioButton>
#include <QDialogButtonBox>
#include <QComboBox>
#include <QJsonDocument> // 解析 JSON 文档
#include <QJsonObject>   // 操作 JSON 对象
#include <QJsonArray>    // 操作 JSON 数组
#include <QJsonValue>    // 处理 JSON 值
#include <QDebug>        // 调试输出（用于 qDebug）
#include <QString>       // 字符串操作
#include <QSet>
#include <QFile>
#include <QSerialPortInfo>
#include <QSerialPort>
#include <QTimer>
#include <QFileDialog>
#include <QIntValidator>
#include "../../../maxtool/LineEdit/customlineedit.h"
namespace Ui
{
    class config_infoSet;
}
struct ConfigInfo
{
    // 成员变量（带注释说明默认值）
    QString identifier = "0";        // 本质就是create后返回的句柄,所以这一标识在同一个block下必须具有唯一性
    int id = -1;                     // 默认无效ID
    QString data = "--";             // 默认数据占位符
    QString position = "未指定位置"; // 默认安装位置
    QString dataType = "温度";
    // 默认构造函数（显式初始化）
    ConfigInfo() = default; // C++11 特性，成员已在声明处初始化
    ConfigInfo(QJsonObject obj)
    {
        identifier = obj["identifier"].toString();
        id = obj["modbusAddr"].toString().toInt();
        position = obj["position"].toString();
        data = obj["data"].toString();
        dataType = obj["type"].toString();
    }

    // 添加相等运算符
    bool operator==(const ConfigInfo &other) const
    {
        return identifier == other.identifier &&
               id == other.id &&
               position == other.position &&
               data == other.data &&
               dataType == other.dataType;
    }
};
class config_infoSet : public QWidget
{
    Q_OBJECT

public:
    explicit config_infoSet(QWidget *parent = nullptr, QString name = "null");
    ~config_infoSet();
    void setBlockName(QString name);
    void setParameters(QMap<QString, ConfigInfo> params);
    QMap<QString, ConfigInfo> getConfigInfo();
    void setOperateEnable(bool enabled);
private slots:

    void on_info_add_clicked();

    void on_info_change_clicked();

    void on_info_delete_clicked();

private:
    Ui::config_infoSet *ui;
    void initUi();
    QStringList allLocations; // 存储所有可选位置

    // 新增的独立排序函数
    QList<ConfigInfo> sortConfigInfoByLocations(const QMap<QString, ConfigInfo> &params);
    int findInsertPosition(const QString &selectedLocation);
};

#endif // CONFIG_INFOSET_H